import os
import sys

def get_resource_path(relative_path):
    """获取资源文件的绝对路径，支持开发环境和打包后的环境
    
    Args:
        relative_path: 相对于项目根目录的资源路径
        
    Returns:
        资源文件的绝对路径
    """
    # 从相对路径中提取文件名
    file_name = os.path.basename(relative_path)
    
    # 确定是否为图片资源
    is_image = 'assets' in relative_path and 'images' in relative_path
    
    # 区分开发环境和打包环境
    if getattr(sys, 'frozen', False):
        # 打包环境 - 优先使用_internal/assets/images目录
        exe_dir = os.path.dirname(sys.executable)
        
        # 针对图片资源的处理
        if is_image:
            # 优先从_internal/assets/images加载
            internal_images_path = os.path.join(exe_dir, "_internal", "assets", "images", file_name)
            if os.path.exists(internal_images_path):
                return internal_images_path
            
            # 如果_internal下找不到，直接返回相对路径
            return relative_path
        
        # 尝试完整相对路径 - 先找_internal目录
        internal_path = os.path.join(exe_dir, "_internal", relative_path)
        if os.path.exists(internal_path):
            return internal_path
        
        return relative_path
    
    else:
        # 开发环境 - 使用项目根目录下的assets/images目录
        # 通过三次dirname操作，从当前文件位置回溯到项目根目录：
        # 1. __file__ 是当前Python文件的路径
        # 2. os.path.abspath(__file__) 获取当前文件的绝对路径
        # 3. 第一次dirname：从当前文件上升到utils目录
        # 4. 第二次dirname：从utils上升到src目录
        # 5. 第三次dirname：从src上升到项目根目录
        # 例如，如果此文件位于 E:\PythonProjects\PySideX\src\utils\resource_helper.py
        # 则base_path将等于 E:\PythonProjects\PySideX
        base_path = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
        full_path = os.path.join(base_path, relative_path)
        if os.path.exists(full_path):
            return full_path
    
    # 如果都找不到，返回相对路径
    return relative_path 